Skip to content

Conversation

@SingleBungIe
Copy link
Collaborator

📌 관련 이슈 (Related Issue)


🧶 주요 변경 내용 (Summary)

  • ConquestPeriod 모델 정의 (startDate, endDate 포함)
  • 초기화 시 기본 기간을 7일 단위로 자동 설정
  • 현재 날짜가 기간 내에 있는지 판단하는 메서드(isWithinPeriod) 구현
  • 점령 기간 종료 여부를 계산하는 프로퍼티(hasEnded) 추가
  • 남은 일수 계산 메서드(daysLeft) 구현
  • 모델과 로직 간 역할을 명확히 하기 위해 핵심 계산 로직은 extension으로 분리
  • 단위 테스트(ConquestPeriodTests) 추가하여 각 로직 검증
  • ConquestPeriodTests 코드에서 Logger 기반 테스트 로그 출력 (콘솔에서 출력값 확인 위함)

📸 스크린샷 (Optional)

image

🧪 테스트 / 검증 내역

  • ConquestPeriod 초기화 시 7일 단위 종료일 계산 확인
  • isWithinPeriod()가 시작일~종료일 범위 내에서 올바르게 판단
  • hasEnded가 종료일 경과 시 true 반환
  • daysLeft()가 음수/nil 방지 로직 포함, 남은 일수 정확히 계산
  • Phone 15 Pro / iOS 18 환경에서 테스트 통과 (⌘ + U)

💬 기타 공유 사항

  • 현재는 단일 주기(7일)만 적용되며, 향후 주기 변경 기능(예: 3일) 확장 가능성 고려
  • XCTest 환경에서 로그 순서가 병렬 실행 시 섞일 수 있으므로, 필요 시 직렬 실행 옵션 적용 검토 (해피도 이 부분 더 학습 필요)

🙇🏻‍♀️ 리뷰 가이드 (선택)

Calendar.date(byAdding:)의 반환값이 옵셔널인 점을 고려하여 guard let으로 바인딩하는 과정에서, 점령 기간(endDate) 계산이 실패할 경우 게임 진행에 심각한 오류가 발생할 수 있어
else 조건에 fatalError()를 사용해 조기 종료 처리했습니다.
복잡한 계산이나 동작이 아닌, 계산된 값을 반환만 하는 간단한 상태 판단이기 때문에 메서드가 아니란 계산 프로퍼티로 구현
- dateComponents()의 첫 번째 파라미터는 Set<Calendar.Component> 타입으로,
  [.day, .hour, .minute, .second] 등 여러 단위를 한 번에 계산할 수 있는 구조
  (작성 시 배열처럼 보이지만 내부적으로는 Set으로 처리됨)
- 결과가 nil이거나 종료일 이후로 인해 음수가 발생할 수 있어 '?? 0'과 'max(0, value)'를 사용하여, 항상 0 이상의 값만 반환되도록 보정
- 모델은 데이터 책임만 가지도록 유지
- 기간 판단, 종료 여부, 남은 일수 계산은 별도 extension에서 관리
- 모델과 로직 간 역할 명확화 및 가독성 향상
우선적으로 구현한 로직의 유효성을 빠르게 검증하기 위해 테스트 코드 추가
main/dev 브랜치에 push 또는 PR 시 '유닛 테스트' 코드 자동 실행
@SingleBungIe SingleBungIe self-assigned this Oct 26, 2025
@SingleBungIe SingleBungIe added the 🐶 happyjay 멈멍! label Oct 26, 2025
@SingleBungIe SingleBungIe changed the title Feat/conquest period 9 Feature: #9 점령 기간 설정 기능 구현 Oct 26, 2025
Copy link
Collaborator

@sing-u8 sing-u8 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다 ~

근데 커밋에서 마지막에 CI 파이프라인 제거 되어있는데, 잘 안되서 다시 지운 건거야?

@SingleBungIe
Copy link
Collaborator Author

근데 커밋에서 마지막에 CI 파이프라인 제거 되어있는데, 잘 안되서 다시 지운 건거야?

x code 버전 문제 때문에 잘 안 되었던 것도 있고 이건 내일 협의 후에 함께 도입 결정 하면 좋을 것 같다는 생각이 들어서 지웠어요-! ㅎㅎ

Copy link
Member

@01sys10 01sys10 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니닷

@SingleBungIe SingleBungIe changed the title Feature: #9 점령 기간 설정 기능 구현 Feature: #9 점령 기간 설정 기능 구현 및 남은 기간 구현 Oct 26, 2025
@SingleBungIe SingleBungIe changed the title Feature: #9 점령 기간 설정 기능 구현 및 남은 기간 구현 Feature: #9 점령 기간 설정 및 남은 기간 구현 Oct 26, 2025
@SingleBungIe SingleBungIe merged commit ab38a4e into dev Oct 26, 2025
@hiseyeon hiseyeon deleted the feat/conquest-period-9 branch October 26, 2025 09:03
@01sys10 01sys10 added the ✨ feat 새로운 기능 구현 label Oct 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feat 새로운 기능 구현 🐶 happyjay 멈멍!

Projects

None yet

Development

Successfully merging this pull request may close these issues.

✨ Feature: 점령 기간 설정 및 남은 기간 구현

4 participants